导航菜单
首页 >  spring boot 上传文件 MultipartFileMultipartFile resource file  > Spring Boot之文件上传:实现简单易用的文件上传功能

Spring Boot之文件上传:实现简单易用的文件上传功能

概述

文件上传是Web应用开发中常见的需求之一,Spring Boot提供了便捷的方式来实现文件上传功能。本篇技术长博文将详细介绍如何在Spring Boot应用中实现文件上传,包括前端页面、Controller处理、文件存储以及安全性考虑,通过代码示例演示了实际操作。文件上传原理

表单的enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。当表单的enctype="application/x-www-form-urlencoded"(默认)时,form表单中的数据格式为:key=value&key=value当表单的enctype="multipart/form-data"时,其传输数据形式如下

image.png

1. 创建Spring Boot项目

首先,在IDE中创建一个新的Spring Boot项目,确保已包含Web依赖。

2. 编写前端页面

在src/main/resources/templates目录下创建一个HTML页面,用于文件上传。

文件上传示例文件上传示例上传文件 3. 编写Controller处理文件上传

创建一个Controller类,处理文件上传请求并保存文件。

@Controllerpublic class FileUploadController {private static final String UPLOAD_DIR = "uploads/";@PostMapping("/upload")public String uploadFile(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return "redirect:/uploadFailure";}try {byte[] bytes = file.getBytes();Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());Files.write(path, bytes);} catch (IOException e) {e.printStackTrace();return "redirect:/uploadFailure";}return "redirect:/uploadSuccess";}} 4. 文件存储与访问

在src/main/resources目录下创建一个uploads文件夹,用于存储上传的文件。为了访问这些文件,你可以配置Spring Boot的静态资源路径。

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:uploads/ 5. 添加路由与页面展示

创建两个简单的HTML页面,用于展示上传结果。

uploadSuccess.html:

上传成功上传成功返回

uploadFailure.html:

上传失败上传失败返回 6. 运行与测试

运行Spring Boot应用,访问http://localhost:8081/upload,上传一个文件,然后会根据上传结果跳转到相应的页面。

7.其他

Spring Boot工程嵌入的tomcat限制了请求的文件大小,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。要更改这个默认值需要在配置文件(如application.properties)中加入两个配置

spring.servlet.multipart.max-file-size=10MBspring.servlet.multipart.max-request-size=10MB上传功能 当表单的enctype="multipart/form-data"时,可以使用MultipartFile 获取上传的文件数据,再通过transferTo方法将其写入到磁盘中package com.example.controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;import java.io.File;import java.io.IOException;import java.util.Date;@RestControllerpublic class FileUploadController {@PostMapping("/upload")public String up(String nickname, MultipartFile photo, HttpServletRequest request) throws IOException {System.out.println(nickname);// 获取图片的原始名称System.out.println(photo.getOriginalFilename());// 取文件类型System.out.println(photo.getContentType());String path = request.getServletContext().getRealPath("/upload/");System.out.println(path);saveFile(photo,path);return "上传成功"; }//public void saveFile(MultipartFile photo,String path) throws IOException {//判断存储的目录是否存在,如果不存在则创建File dir = new File(path);if(!dir.exists()){// 创建目录dir.mkdir(); }File file = new File(path+photo.getOriginalFilename());photo.transferTo(file); }} 测试

image.png

总结

相关推荐: